reduce(累加值, 當前值)
: 一個累加器及陣列中每項元素(由左至右)傳入回呼函式,將陣列化為單一值。let score = [2, 4, 6, 8, 10];
let result = score.reduce(function (acc, cv) {
return acc + cv;
},0); // 需要給值當作累加值的第一個數值
console.log(result);
語法
arr.reduce(callback[accumulator, currentValue, currentIndex, array], initialValue)
操作陣列的時候要注意到, 陣列使用的是同一個記憶體位置, 因此會一起更動
let a = 1;
let b = a;
console.log(a,b); //1,1
a = 2;
console.log(a,b); //2,1
let a = ["a", "b", "c"];
let b = a;
console.log(a, b); //['a', 'b', 'c'] ['a', 'b', 'c']
a[0] = "x";
console.log(a, b); //['x', 'b', 'c'] ['x', 'b', 'c']
我有整理的陣列方法大概到這邊,那一樣再來個練習好了。
我們練習是著寫出一個方法來判斷是不是一個正確的統編
統編的規則: https://www.fia.gov.tw/singlehtml/3?cntId=c4d9cff38c8642ef8872774ee9987283
// 題目:根據台灣財政部所提供的公司統編驗證規則,計算統一編號是否正確
function isValidVatNumber(vat) {
//1.規定8碼數字才可進入判斷
//2.聲明一個陣列紀錄每個數字的權重, 並將每個數字加權後的十位數與個位數加到sum變數
//3.如果被5整除, 或是第7位數為7且sum+1可以被5整除, return true, 否則return false
if (vat.length == 8) {
const ratio = [1, 2, 1, 2, 1, 2, 4, 1];
let sum = vat.split("").reduce((sum, num, i) => {
return (
sum +
((Number(num) * ratio[i]) % 10) + //個位數
Math.trunc((Number(num) * ratio[i]) / 10) //十位數
);
}, 0);
return sum % 5 == 0 || (vat[6] == 7 && (sum + 1) % 5 == 0);
}
}
console.log(isValidVatNumber("10458575")); // true
console.log(isValidVatNumber("88117125")); // true
console.log(isValidVatNumber("53212539")); // true
console.log(isValidVatNumber("88117126")); // false